<html>
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"/>
  <title>
   40个Java集合面试问题和答案  | 数螺 | NAUT IDEA
  </title>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet"/>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
  <style type="text/css">
   #xmain img {
                  max-width: 100%;
                  display: block;
                  margin-top: 10px;
                  margin-bottom: 10px;
                }

                #xmain p {
                    line-height:150%;
                    font-size: 16px;
                    margin-top: 20px;
                }

                #xmain h2 {
                    font-size: 24px;
                }

                #xmain h3 {
                    font-size: 20px;
                }

                #xmain h4 {
                    font-size: 18px;
                }


                .header {
	           background-color: #0099ff;
	           color: #ffffff;
	           margin-bottom: 20px;
	        }

	        .header p {
                  margin: 0px;
                  padding: 10px 0;
                  display: inline-block;  
                  vertical-align: middle;
                  font-size: 16px;
               }

               .header a {
                 color: white;
               }

              .header img {
                 height: 25px;
              }
  </style>
  <script src="http://cdn.bootcss.com/jquery/3.0.0/jquery.min.js">
  </script>
  <script src="http://nautstatic-10007657.file.myqcloud.com/static/css/readability.min.js" type="text/javascript">
  </script>
  <script type="text/javascript">
   $(document).ready(function() {
                 var loc = document.location;
                 var uri = {
                  spec: "http://dataunion.org/21869.html",
                  host: "http://dataunion.org",
                  prePath: "http://dataunion.org",
                  scheme: "http",
                  pathBase: "http://dataunion.org/"
                 };
    
                 var documentClone = document.cloneNode(true);
                 var article = new Readability(uri, documentClone).parse();
     
                 document.getElementById("xmain").innerHTML = article.content;
                });
  </script>
  <!-- 1466459817: Accept with keywords: (title(0.2):集合,问题,社区,数盟,答案, topn(0.266666666667):区别,队列,数盟,集合,查找,数组,遍历,容量,元素,视图,参数,文章,类型,排序,方法,节点,对象,性能,算法,哈希,泛型,顺序,未定义,框架,代码,两者,列表,线程,时候,序列化).-->
 </head>
 <body onload="">
  <div class="header">
   <div class="container">
    <div class="row">
     <div class="col-xs-6 col-sm-6 text-left">
      <a href="/databee">
       <img src="http://nautidea-10007657.cos.myqcloud.com/logo_white.png"/>
      </a>
      <a href="/databee">
       <p>
        数螺
       </p>
      </a>
     </div>
     <div class="hidden-xs col-sm-6 text-right">
      <p>
       致力于数据科学的推广和知识传播
      </p>
     </div>
    </div>
   </div>
  </div>
  <div class="container text-center">
   <h1>
    40个Java集合面试问题和答案
   </h1>
  </div>
  <div class="container" id="xmain">
   ﻿﻿
   <title>
    40个Java集合面试问题和答案 | 数盟社区
   </title>
   <!-- All in One SEO Pack 2.2.7.6.2 by Michael Torbert of Semper Fi Web Design[32,63] -->
   <!-- /all in one seo pack -->
   <!--
<div align="center">
<a href="http://strata.oreilly.com.cn/hadoop-big-data-cn?cmp=mp-data-confreg-home-stcn16_dataunion_pc" target="_blank"><img src="http://dataunion.org/wp-content/uploads/2016/05/stratabj.jpg"/ ></a>
</div>
-->
   <header id="header-web">
    <div class="header-main">
     <hgroup class="logo">
      <h1>
       <a href="http://dataunion.org/" rel="home" title="数盟社区">
        <img src="http://dataunion.org/wp-content/themes/yzipi/images/logo.png"/>
       </a>
      </h1>
     </hgroup>
     <!--logo-->
     <nav class="header-nav">
      <ul class="menu" id="menu-%e4%b8%bb%e8%8f%9c%e5%8d%95">
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-71" id="menu-item-71">
        <a href="http://dataunion.org/category/events" title="events">
         活动
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22457" id="menu-item-22457">
          <a href="http://dataunion.org/2016timeline">
           2016档期
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-22459" id="menu-item-22459">
          <a href="http://dataunion.org/category/parterc">
           合作会议
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-20869" id="menu-item-20869">
        <a href="http://dataunion.org/category/tech" title="articles">
         文章
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20867" id="menu-item-20867">
          <a href="http://dataunion.org/category/tech/base" title="base">
           基础架构
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3302" id="menu-item-3302">
          <a href="http://dataunion.org/category/tech/ai" title="ai">
           人工智能
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3303" id="menu-item-3303">
          <a href="http://dataunion.org/category/tech/analysis" title="analysis">
           数据分析
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21920" id="menu-item-21920">
          <a href="http://dataunion.org/category/tech/dm">
           数据挖掘
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3314" id="menu-item-3314">
          <a href="http://dataunion.org/category/tech/viz" title="viz">
           可视化
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3305" id="menu-item-3305">
          <a href="http://dataunion.org/category/tech/devl" title="devl">
           编程语言
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-has-children menu-item-20876" id="menu-item-20876">
        <a href="http://dataunion.org/category/industry">
         行业
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-16328" id="menu-item-16328">
          <a href="http://dataunion.org/category/industry/case" title="case">
           行业应用
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-2112" id="menu-item-2112">
          <a href="http://dataunion.org/category/industry/demo" title="demo">
           Demo展示
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21562" id="menu-item-21562">
          <a href="http://dataunion.org/category/industry/news">
           行业资讯
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-311" id="menu-item-311">
        <a href="http://dataunion.org/category/sources" title="sources">
         资源
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20870" id="menu-item-20870">
        <a href="http://dataunion.org/category/books" title="book">
         图书
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21363" id="menu-item-21363">
        <a href="http://dataunion.org/category/training">
         课程
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-21853" id="menu-item-21853">
        <a href="http://dataunion.org/category/jobs">
         职位
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-22050" id="menu-item-22050">
          <a href="http://dataunion.org/category/career">
           职业规划
          </a>
         </li>
        </ul>
       </li>
      </ul>
     </nav>
     <!--header-nav-->
    </div>
   </header>
   <!--header-web-->
   <div id="main">
    <div id="soutab">
     <form action="http://dataunion.org/" class="search" method="get">
     </form>
    </div>
    <div id="container">
     <nav id="mbx">
      当前位置：
      <a href="http://dataunion.org">
       首页
      </a>
      &gt;
      <a href="http://dataunion.org/category/industry">
       行业
      </a>
      &gt;  正文
     </nav>
     <!--mbx-->
     <article class="content">
      <header align="centre" class="contenttitle">
       <div class="mscc">
        <h1 class="mscctitle">
         <a href="http://dataunion.org/21869.html">
          40个Java集合面试问题和答案
         </a>
        </h1>
        <address class="msccaddress ">
         <em>
          514 次阅读 -
         </em>
         <a href="http://dataunion.org/category/industry" rel="category tag">
          行业
         </a>
        </address>
       </div>
      </header>
      <div class="content-text">
       <div class="content">
        <p>
         <strong>
          1.Java集合框架是什么？说出一些集合框架的优点？
         </strong>
        </p>
        <p>
         每种编程语言中都有集合，最初的Java版本包含几种集合类：Vector、Stack、HashTable和Array。随着集合的广泛使 用，Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类，Java已经经历了很久。它还包括在 Java并发包中，阻塞接口以及它们的实现。集合框架的部分优点如下：
        </p>
        <p>
         （1）使用核心集合类降低开发成本，而非实现我们自己的集合类。
        </p>
        <p>
         （2）随着使用经过严格测试的集合框架类，代码质量会得到提高。
        </p>
        <p>
         （3）通过使用JDK附带的集合类，可以降低代码维护成本。
        </p>
        <p>
         （4）复用性和可操作性。
        </p>
        <p>
         <strong>
          2.集合框架中的泛型有什么优点？
         </strong>
        </p>
        <p>
         Java1.5引入了泛型，所有的集合接口和实现都大量地使用它。泛型允许我们为集合提供一个可以容纳的对象类型，因此，如果你添加其它类型的任何元素， 它会在编译时报错。这避免了在运行时出现ClassCastException，因为你将会在编译时得到报错信息。泛型也使得代码整洁，我们不需要使用显 式转换和instanceOf操作符。它也给运行时带来好处，因为不会产生类型检查的字节码指令。
        </p>
        <p>
         <strong>
          3.Java集合框架的基础接口有哪些？
         </strong>
        </p>
        <p>
         Collection为集合层级的根接口。一个集合代表一组对象，这些对象即为它的元素。Java平台不提供这个接口任何直接的实现。
        </p>
        <p>
         Set是一个不能包含重复元素的集合。这个接口对数学集合抽象进行建模，被用来代表集合，就如一副牌。
        </p>
        <p>
         List是一个有序集合，可以包含重复元素。你可以通过它的索引来访问任何元素。List更像长度动态变换的数组。
        </p>
        <p>
         Map是一个将key映射到value的对象.一个Map不能包含重复的key：每个key最多只能映射一个value。
        </p>
        <p>
         一些其它的接口有Queue、Dequeue、SortedSet、SortedMap和ListIterator。
        </p>
        <p>
         <strong>
          4.为何Collection不从Cloneable和Serializable接口继承？
         </strong>
        </p>
        <p>
         Collection接口指定一组对象，对象即为它的元素。如何维护这些元素由Collection的具体实现决定。例如，一些如List的 Collection实现允许重复的元素，而其它的如Set就不允许。很多Collection实现有一个公有的clone方法。然而，把它放到集合的所 有实现中也是没有意义的。这是因为Collection是一个抽象表现。重要的是实现。
        </p>
        <p>
         当与具体实现打交道的时候，克隆或序列化的语义和含义才发挥作用。所以，具体实现应该决定如何对它进行克隆或序列化，或它是否可以被克隆或序列化。
        </p>
        <p>
         在所有的实现中授权克隆和序列化，最终导致更少的灵活性和更多的限制。特定的实现应该决定它是否可以被克隆和序列化。
        </p>
        <p>
         <strong>
          5.为何Map接口不继承Collection接口？
         </strong>
        </p>
        <p>
         尽管Map接口和它的实现也是集合框架的一部分，但Map不是集合，集合也不是Map。因此，Map继承Collection毫无意义，反之亦然。
        </p>
        <p>
         如果Map继承Collection接口，那么元素去哪儿？Map包含key-value对，它提供抽取key或value列表集合的方法，但是它不适合“一组对象”规范。
        </p>
        <p>
         <strong>
          6.Iterator是什么？
         </strong>
        </p>
        <p>
         Iterator接口提供遍历任何Collection的接口。我们可以从一个Collection中使用迭代器方法来获取迭代器实例。迭代器取代了Java集合框架中的Enumeration。迭代器允许调用者在迭代过程中移除元素。
        </p>
        <p>
         <strong>
          7.Enumeration和Iterator接口的区别？
         </strong>
        </p>
        <p>
         Enumeration的速度是Iterator的两倍，也使用更少的内存。Enumeration是非常基础的，也满足了基础的需要。但是，与 Enumeration相比，Iterator更加安全，因为当一个集合正在被遍历的时候，它会阻止其它线程去修改集合。
        </p>
        <p>
         迭代器取代了Java集合框架中的Enumeration。迭代器允许调用者从集合中移除元素，而Enumeration不能做到。为了使它的功能更加清晰，迭代器方法名已经经过改善。
        </p>
        <p>
         <strong>
          8.为何没有像Iterator.add()这样的方法，向集合中添加元素？
         </strong>
        </p>
        <p>
         语义不明，已知的是，Iterator的协议不能确保迭代的次序。然而要注意，ListIterator没有提供一个add操作，它要确保迭代的顺序。
        </p>
        <p>
         <strong>
          9.为何迭代器没有一个方法可以直接获取下一个元素，而不需要移动游标？
         </strong>
        </p>
        <p>
         它可以在当前Iterator的顶层实现，但是它用得很少，如果将它加到接口中，每个继承都要去实现它，这没有意义。
        </p>
        <p>
         <strong>
          10.Iterater和ListIterator之间有什么区别？
         </strong>
        </p>
        <p>
         （1）我们可以使用Iterator来遍历Set和List集合，而ListIterator只能遍历List。
        </p>
        <p>
         （2）Iterator只可以向前遍历，而LIstIterator可以双向遍历。
        </p>
        <p>
         （3）ListIterator从Iterator接口继承，然后添加了一些额外的功能，比如添加一个元素、替换一个元素、获取前面或后面元素的索引位置。
        </p>
        <p>
         <strong>
          11.遍历一个List有哪些不同的方式？
         </strong>
        </p>
        <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
        <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-5768669946f4d727953835" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
         <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <span class="crayon-title">
          </span>
          <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
           <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
            <div class="crayon-button-icon">
            </div>
           </div>
           <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
            <div class="crayon-button-icon">
            </div>
           </div>
           <div class="crayon-button crayon-wrap-button" title="切换自动换行">
            <div class="crayon-button-icon">
            </div>
           </div>
           <div class="crayon-button crayon-expand-button" title="点击展开代码">
            <div class="crayon-button-icon">
            </div>
           </div>
           <div class="crayon-button crayon-copy-button" title="复制代码">
            <div class="crayon-button-icon">
            </div>
           </div>
           <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
            <div class="crayon-button-icon">
            </div>
           </div>
          </div>
         </div>
         <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
         </div>
         <div class="crayon-plain-wrap">
          <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
           List&amp;lt;String&amp;gt; strList = new ArrayList&amp;lt;&amp;gt;();
//使用for-each循环
for(String obj : strList){
  System.out.println(obj);
}
//using iterator
Iterator&amp;lt;String&amp;gt; it = strList.iterator();
while(it.hasNext()){
  String obj = it.next();
  System.out.println(obj);
}
          </textarea>
         </div>
         <div class="crayon-main" style="">
          <table class="crayon-table">
           <tbody>
            <tr class="crayon-row">
             <td class="crayon-nums " data-settings="show">
              <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
               <div class="crayon-num" data-line="crayon-5768669946f4d727953835-1">
                1
               </div>
               <div class="crayon-num crayon-striped-num" data-line="crayon-5768669946f4d727953835-2">
                2
               </div>
               <div class="crayon-num" data-line="crayon-5768669946f4d727953835-3">
                3
               </div>
               <div class="crayon-num crayon-striped-num" data-line="crayon-5768669946f4d727953835-4">
                4
               </div>
               <div class="crayon-num" data-line="crayon-5768669946f4d727953835-5">
                5
               </div>
               <div class="crayon-num crayon-striped-num" data-line="crayon-5768669946f4d727953835-6">
                6
               </div>
               <div class="crayon-num" data-line="crayon-5768669946f4d727953835-7">
                7
               </div>
               <div class="crayon-num crayon-striped-num" data-line="crayon-5768669946f4d727953835-8">
                8
               </div>
               <div class="crayon-num" data-line="crayon-5768669946f4d727953835-9">
                9
               </div>
               <div class="crayon-num crayon-striped-num" data-line="crayon-5768669946f4d727953835-10">
                10
               </div>
               <div class="crayon-num" data-line="crayon-5768669946f4d727953835-11">
                11
               </div>
              </div>
             </td>
             <td class="crayon-code">
              <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
               <div class="crayon-line" id="crayon-5768669946f4d727953835-1">
                <span class="crayon-v">
                 List
                </span>
                <span class="crayon-o">
                 &amp;
                </span>
                <span class="crayon-v">
                 lt
                </span>
                <span class="crayon-sy">
                 ;
                </span>
                <span class="crayon-t">
                 String
                </span>
                <span class="crayon-o">
                 &amp;
                </span>
                <span class="crayon-v">
                 gt
                </span>
                <span class="crayon-sy">
                 ;
                </span>
                <span class="crayon-i">
                 strList
                </span>
                <span class="crayon-o">
                 =
                </span>
                <span class="crayon-r">
                 new
                </span>
                <span class="crayon-v">
                 ArrayList
                </span>
                <span class="crayon-o">
                 &amp;
                </span>
                <span class="crayon-v">
                 lt
                </span>
                <span class="crayon-sy">
                 ;
                </span>
                <span class="crayon-o">
                 &amp;
                </span>
                <span class="crayon-v">
                 gt
                </span>
                <span class="crayon-sy">
                 ;
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 ;
                </span>
               </div>
               <div class="crayon-line crayon-striped-line" id="crayon-5768669946f4d727953835-2">
                <span class="crayon-c">
                 //使用for-each循环
                </span>
               </div>
               <div class="crayon-line" id="crayon-5768669946f4d727953835-3">
                <span class="crayon-st">
                 for
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-t">
                 String
                </span>
                <span class="crayon-i">
                 obj
                </span>
                <span class="crayon-o">
                 :
                </span>
                <span class="crayon-v">
                 strList
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 {
                </span>
               </div>
               <div class="crayon-line crayon-striped-line" id="crayon-5768669946f4d727953835-4">
                <span class="crayon-v">
                 System
                </span>
                <span class="crayon-sy">
                 .
                </span>
                <span class="crayon-v">
                 out
                </span>
                <span class="crayon-sy">
                 .
                </span>
                <span class="crayon-e">
                 println
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-v">
                 obj
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 ;
                </span>
               </div>
               <div class="crayon-line" id="crayon-5768669946f4d727953835-5">
                <span class="crayon-sy">
                 }
                </span>
               </div>
               <div class="crayon-line crayon-striped-line" id="crayon-5768669946f4d727953835-6">
                <span class="crayon-c">
                 //using iterator
                </span>
               </div>
               <div class="crayon-line" id="crayon-5768669946f4d727953835-7">
                <span class="crayon-v">
                 Iterator
                </span>
                <span class="crayon-o">
                 &amp;
                </span>
                <span class="crayon-v">
                 lt
                </span>
                <span class="crayon-sy">
                 ;
                </span>
                <span class="crayon-t">
                 String
                </span>
                <span class="crayon-o">
                 &amp;
                </span>
                <span class="crayon-v">
                 gt
                </span>
                <span class="crayon-sy">
                 ;
                </span>
                <span class="crayon-i">
                 it
                </span>
                <span class="crayon-o">
                 =
                </span>
                <span class="crayon-v">
                 strList
                </span>
                <span class="crayon-sy">
                 .
                </span>
                <span class="crayon-e">
                 iterator
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 ;
                </span>
               </div>
               <div class="crayon-line crayon-striped-line" id="crayon-5768669946f4d727953835-8">
                <span class="crayon-st">
                 while
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-v">
                 it
                </span>
                <span class="crayon-sy">
                 .
                </span>
                <span class="crayon-e">
                 hasNext
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 {
                </span>
               </div>
               <div class="crayon-line" id="crayon-5768669946f4d727953835-9">
                <span class="crayon-t">
                 String
                </span>
                <span class="crayon-i">
                 obj
                </span>
                <span class="crayon-o">
                 =
                </span>
                <span class="crayon-v">
                 it
                </span>
                <span class="crayon-sy">
                 .
                </span>
                <span class="crayon-e">
                 next
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 ;
                </span>
               </div>
               <div class="crayon-line crayon-striped-line" id="crayon-5768669946f4d727953835-10">
                <span class="crayon-v">
                 System
                </span>
                <span class="crayon-sy">
                 .
                </span>
                <span class="crayon-v">
                 out
                </span>
                <span class="crayon-sy">
                 .
                </span>
                <span class="crayon-e">
                 println
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-v">
                 obj
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 ;
                </span>
               </div>
               <div class="crayon-line" id="crayon-5768669946f4d727953835-11">
                <span class="crayon-sy">
                 }
                </span>
               </div>
              </div>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
        <!-- [Format Time: 0.0178 seconds] -->
        <p>
         使用迭代器更加线程安全，因为它可以确保，在当前遍历的集合元素被更改的时候，它会抛出ConcurrentModificationException。
        </p>
        <p>
         <strong>
          12.通过迭代器fail-fast属性，你明白了什么？
         </strong>
        </p>
        <p>
         每次我们尝试获取下一个元素的时候，Iterator fail-fast属性检查当前集合结构里的任何改动。如果发现任何改动，它抛出ConcurrentModificationException。 Collection中所有Iterator的实现都是按fail-fast来设计的（ConcurrentHashMap和 CopyOnWriteArrayList这类并发集合类除外）。
        </p>
        <p>
         <strong>
          13.fail-fast与fail-safe有什么区别？
         </strong>
        </p>
        <p>
         Iterator的fail-fast属性与当前的集合共同起作用，因此它不会受到集合中任何改动的影响。Java.util包中的所有集合类都被设计为 fail-fast的，而java.util.concurrent中的集合类都为fail-safe的。Fail-fast迭代器抛出 ConcurrentModificationException，而fail-safe迭代器从不抛出 ConcurrentModificationException。
        </p>
        <p>
         <strong>
          14.在迭代一个集合的时候，如何避免ConcurrentModificationException？
         </strong>
        </p>
        <p>
         在遍历一个集合的时候，我们可以使用并发集合类来避免ConcurrentModificationException，比如使用CopyOnWriteArrayList，而不是ArrayList。
        </p>
        <p>
         <strong>
          15.为何Iterator接口没有具体的实现？
         </strong>
        </p>
        <p>
         Iterator接口定义了遍历集合的方法，但它的实现则是集合实现类的责任。每个能够返回用于遍历的Iterator的集合类都有它自己的Iterator实现内部类。
        </p>
        <p>
         这就允许集合类去选择迭代器是fail-fast还是fail-safe的。比如，ArrayList迭代器是fail-fast的，而CopyOnWriteArrayList迭代器是fail-safe的。
        </p>
        <p>
         <strong>
          16.UnsupportedOperationException是什么？
         </strong>
        </p>
        <p>
         UnsupportedOperationException是用于表明操作不支持的异常。在JDK类中已被大量运用，在集合框架 java.util.Collections.UnmodifiableCollection将会在所有add和remove操作中抛出这个异常。
        </p>
        <p>
         <strong>
          17.在Java中，HashMap是如何工作的？
         </strong>
        </p>
        <p>
         HashMap在Map.Entry静态内部类实现中存储key-value对。HashMap使用哈希算法，在put和get方法中，它使用 hashCode()和equals()方法。当我们通过传递key-value对调用put方法的时候，HashMap使用Key hashCode()和哈希算法来找出存储key-value对的索引。Entry存储在LinkedList中，所以如果存在entry，它使用 equals()方法来检查传递的key是否已经存在，如果存在，它会覆盖value，如果不存在，它会创建一个新的entry然后保存。当我们通过传递 key调用get方法时，它再次使用hashCode()来找到数组中的索引，然后使用equals()方法找出正确的Entry，然后返回它的值。下面 的图片解释了详细内容。
        </p>
        <p>
         其它关于HashMap比较重要的问题是容量、负荷系数和阀值调整。HashMap默认的初始容量是32，负荷系数是0.75。阀值是为负荷系数乘以容 量，无论何时我们尝试添加一个entry，如果map的大小比阀值大的时候，HashMap会对map的内容进行重新哈希，且使用更大的容量。容量总是2 的幂，所以如果你知道你需要存储大量的key-value对，比如缓存从数据库里面拉取的数据，使用正确的容量和负荷系数对HashMap进行初始化是个 不错的做法。
        </p>
        <p>
         <strong>
          18.hashCode()和equals()方法有何重要性？
         </strong>
        </p>
        <p>
         HashMap使用Key对象的hashCode()和equals()方法去决定key-value对的索引。当我们试着从HashMap中获取值的时 候，这些方法也会被用到。如果这些方法没有被正确地实现，在这种情况下，两个不同Key也许会产生相同的hashCode()和equals()输 出，HashMap将会认为它们是相同的，然后覆盖它们，而非把它们存储到不同的地方。同样的，所有不允许存储重复数据的集合类都使用 hashCode()和equals()去查找重复，所以正确实现它们非常重要。equals()和hashCode()的实现应该遵循以下规则：
        </p>
        <p>
         （1）如果o1.equals(o2)，那么o1.hashCode() == o2.hashCode()总是为true的。
        </p>
        <p>
         （2）如果o1.hashCode() == o2.hashCode()，并不意味着o1.equals(o2)会为true。
        </p>
        <p>
         <strong>
          19.我们能否使用任何类作为Map的key？
         </strong>
        </p>
        <p>
         我们可以使用任何类作为Map的key，然而在使用它们之前，需要考虑以下几点：
        </p>
        <p>
         （1）如果类重写了equals()方法，它也应该重写hashCode()方法。
        </p>
        <p>
         （2）类的所有实例需要遵循与equals()和hashCode()相关的规则。请参考之前提到的这些规则。
        </p>
        <p>
         （3）如果一个类没有使用equals()，你不应该在hashCode()中使用它。
        </p>
        <p>
         （4）用户自定义key类的最佳实践是使之为不可变的，这样，hashCode()值可以被缓存起来，拥有更好的性能。不可变的类也可以确保hashCode()和equals()在未来不会改变，这样就会解决与可变相关的问题了。
        </p>
        <p>
         比如，我有一个类MyKey，在HashMap中使用它。
        </p>
        <!-- Crayon Syntax Highlighter v_2.7.2_beta -->
        <div class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" id="crayon-5768669946f5f790263312" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
         <div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
          <span class="crayon-title">
          </span>
          <div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;">
           <div class="crayon-button crayon-nums-button" title="切换是否显示行编号">
            <div class="crayon-button-icon">
            </div>
           </div>
           <div class="crayon-button crayon-plain-button" title="纯文本显示代码">
            <div class="crayon-button-icon">
            </div>
           </div>
           <div class="crayon-button crayon-wrap-button" title="切换自动换行">
            <div class="crayon-button-icon">
            </div>
           </div>
           <div class="crayon-button crayon-expand-button" title="点击展开代码">
            <div class="crayon-button-icon">
            </div>
           </div>
           <div class="crayon-button crayon-copy-button" title="复制代码">
            <div class="crayon-button-icon">
            </div>
           </div>
           <div class="crayon-button crayon-popup-button" title="在新窗口中显示代码">
            <div class="crayon-button-icon">
            </div>
           </div>
          </div>
         </div>
         <div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;">
         </div>
         <div class="crayon-plain-wrap">
          <textarea class="crayon-plain print-no" data-settings="dblclick" readonly="" style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;" wrap="soft">
           //传递给MyKey的name参数被用于equals()和hashCode()中
MyKey key = new MyKey('Pankaj'); //assume hashCode=1234
myHashMap.put(key, 'Value');
// 以下的代码会改变key的hashCode()和equals()值
key.setName('Amit'); //assume new hashCode=7890
//下面会返回null，因为HashMap会尝试查找存储同样索引的key，而key已被改变了，匹配失败，返回null
myHashMap.get(new MyKey('Pankaj'));
          </textarea>
         </div>
         <div class="crayon-main" style="">
          <table class="crayon-table">
           <tbody>
            <tr class="crayon-row">
             <td class="crayon-nums " data-settings="show">
              <div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;">
               <div class="crayon-num" data-line="crayon-5768669946f5f790263312-1">
                1
               </div>
               <div class="crayon-num crayon-striped-num" data-line="crayon-5768669946f5f790263312-2">
                2
               </div>
               <div class="crayon-num" data-line="crayon-5768669946f5f790263312-3">
                3
               </div>
               <div class="crayon-num crayon-striped-num" data-line="crayon-5768669946f5f790263312-4">
                4
               </div>
               <div class="crayon-num" data-line="crayon-5768669946f5f790263312-5">
                5
               </div>
               <div class="crayon-num crayon-striped-num" data-line="crayon-5768669946f5f790263312-6">
                6
               </div>
               <div class="crayon-num" data-line="crayon-5768669946f5f790263312-7">
                7
               </div>
              </div>
             </td>
             <td class="crayon-code">
              <div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
               <div class="crayon-line" id="crayon-5768669946f5f790263312-1">
                <span class="crayon-c">
                 //传递给MyKey的name参数被用于equals()和hashCode()中
                </span>
               </div>
               <div class="crayon-line crayon-striped-line" id="crayon-5768669946f5f790263312-2">
                <span class="crayon-i">
                 MyKey
                </span>
                <span class="crayon-i">
                 key
                </span>
                <span class="crayon-o">
                 =
                </span>
                <span class="crayon-r">
                 new
                </span>
                <span class="crayon-e">
                 MyKey
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-s">
                 'Pankaj'
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 ;
                </span>
                <span class="crayon-c">
                 //assume hashCode=1234
                </span>
               </div>
               <div class="crayon-line" id="crayon-5768669946f5f790263312-3">
                <span class="crayon-v">
                 myHashMap
                </span>
                <span class="crayon-sy">
                 .
                </span>
                <span class="crayon-e">
                 put
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-v">
                 key
                </span>
                <span class="crayon-sy">
                 ,
                </span>
                <span class="crayon-s">
                 'Value'
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 ;
                </span>
               </div>
               <div class="crayon-line crayon-striped-line" id="crayon-5768669946f5f790263312-4">
                <span class="crayon-c">
                 // 以下的代码会改变key的hashCode()和equals()值
                </span>
               </div>
               <div class="crayon-line" id="crayon-5768669946f5f790263312-5">
                <span class="crayon-v">
                 key
                </span>
                <span class="crayon-sy">
                 .
                </span>
                <span class="crayon-e">
                 setName
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-s">
                 'Amit'
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 ;
                </span>
                <span class="crayon-c">
                 //assume new hashCode=7890
                </span>
               </div>
               <div class="crayon-line crayon-striped-line" id="crayon-5768669946f5f790263312-6">
                <span class="crayon-c">
                 //下面会返回null，因为HashMap会尝试查找存储同样索引的key，而key已被改变了，匹配失败，返回null
                </span>
               </div>
               <div class="crayon-line" id="crayon-5768669946f5f790263312-7">
                <span class="crayon-v">
                 myHashMap
                </span>
                <span class="crayon-sy">
                 .
                </span>
                <span class="crayon-e">
                 get
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-r">
                 new
                </span>
                <span class="crayon-e">
                 MyKey
                </span>
                <span class="crayon-sy">
                 (
                </span>
                <span class="crayon-s">
                 'Pankaj'
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 )
                </span>
                <span class="crayon-sy">
                 ;
                </span>
               </div>
              </div>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
        <!-- [Format Time: 0.0141 seconds] -->
        <p>
         那就是为何String和Integer被作为HashMap的key大量使用。
        </p>
        <p>
         <strong>
          20.Map接口提供了哪些不同的集合视图？
         </strong>
        </p>
        <p>
         Map接口提供三个集合视图：
        </p>
        <p>
         （1）Set keyset()：返回map中包含的所有key的一个Set视图。集合是受map支持的，map的变化会在集合中反映出来，反之亦然。当一个迭代器正在 遍历一个集合时，若map被修改了（除迭代器自身的移除操作以外），迭代器的结果会变为未定义。集合支持通过Iterator的Remove、 Set.remove、removeAll、retainAll和clear操作进行元素移除，从map中移除对应的映射。它不支持add和addAll 操作。
        </p>
        <p>
         （2）Collection values()：返回一个map中包含的所有value的一个Collection视图。这个collection受map支持的，map的变化会在 collection中反映出来，反之亦然。当一个迭代器正在遍历一个collection时，若map被修改了（除迭代器自身的移除操作以外），迭代器 的结果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行 元素移除，从map中移除对应的映射。它不支持add和addAll操作。
        </p>
        <p>
         （3）Set&lt;Map.Entry&lt;K,V&gt;&gt; entrySet()：返回一个map钟包含的所有映射的一个集合视图。这个集合受map支持的，map的变化会在collection中反映出来，反之 亦然。当一个迭代器正在遍历一个集合时，若map被修改了（除迭代器自身的移除操作，以及对迭代器返回的entry进行setValue外），迭代器的结 果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行元素 移除，从map中移除对应的映射。它不支持add和addAll操作。
        </p>
        <p>
         <strong>
          21.HashMap和HashTable有何不同？
         </strong>
        </p>
        <p>
         （1）HashMap允许key和value为null，而HashTable不允许。
        </p>
        <p>
         （2）HashTable是同步的，而HashMap不是。所以HashMap适合单线程环境，HashTable适合多线程环境。
        </p>
        <p>
         （3）在Java1.4中引入了LinkedHashMap，HashMap的一个子类，假如你想要遍历顺序，你很容易从HashMap转向LinkedHashMap，但是HashTable不是这样的，它的顺序是不可预知的。
        </p>
        <p>
         （4）HashMap提供对key的Set进行遍历，因此它是fail-fast的，但HashTable提供对key的Enumeration进行遍历，它不支持fail-fast。
        </p>
        <p>
         （5）HashTable被认为是个遗留的类，如果你寻求在迭代的时候修改Map，你应该使用CocurrentHashMap。
        </p>
        <p>
         <strong>
          22.如何决定选用HashMap还是TreeMap？
         </strong>
        </p>
        <p>
         对于在Map中插入、删除和定位元素这类操作，HashMap是最好的选择。然而，假如你需要对一个有序的key集合进行遍历，TreeMap是更好的选 择。基于你的collection的大小，也许向HashMap中添加元素会更快，将map换为TreeMap进行有序key的遍历。
        </p>
        <p>
         <strong>
          23.ArrayList和Vector有何异同点？
         </strong>
        </p>
        <p>
         ArrayList和Vector在很多时候都很类似。
        </p>
        <p>
         （1）两者都是基于索引的，内部由一个数组支持。
        </p>
        <p>
         （2）两者维护插入的顺序，我们可以根据插入顺序来获取元素。
        </p>
        <p>
         （3）ArrayList和Vector的迭代器实现都是fail-fast的。
        </p>
        <p>
         （4）ArrayList和Vector两者允许null值，也可以使用索引值对元素进行随机访问。
        </p>
        <p>
         以下是ArrayList和Vector的不同点。
        </p>
        <p>
         （1）Vector是同步的，而ArrayList不是。然而，如果你寻求在迭代的时候对列表进行改变，你应该使用CopyOnWriteArrayList。
        </p>
        <p>
         （2）ArrayList比Vector快，它因为有同步，不会过载。
        </p>
        <p>
         （3）ArrayList更加通用，因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。
        </p>
        <p>
         <strong>
          24.Array和ArrayList有何区别？什么时候更适合用Array？
         </strong>
        </p>
        <p>
         Array可以容纳基本类型和对象，而ArrayList只能容纳对象。
        </p>
        <p>
         Array是指定大小的，而ArrayList大小是固定的。
        </p>
        <p>
         Array没有提供ArrayList那么多功能，比如addAll、removeAll和iterator等。尽管ArrayList明显是更好的选择，但也有些时候Array比较好用。
        </p>
        <p>
         （1）如果列表的大小已经指定，大部分情况下是存储和遍历它们。
        </p>
        <p>
         （2）对于遍历基本数据类型，尽管Collections使用自动装箱来减轻编码任务，在指定大小的基本类型的列表上工作也会变得很慢。
        </p>
        <p>
         （3）如果你要使用多维数组，使用[][]比List&lt;List&lt;&gt;&gt;更容易。
        </p>
        <p>
         <strong>
          25.ArrayList和LinkedList有何区别？
         </strong>
        </p>
        <p>
         ArrayList和LinkedList两者都实现了List接口，但是它们之间有些不同。
        </p>
        <p>
         （1）ArrayList 是由Array所支持的基于一个索引的数据结构，所以它提供对元素的随机访问，复杂度为O(1)，但LinkedList存储一系列的节点数据，每个节点 都与前一个和下一个节点相连接。所以，尽管有使用索引获取元素的方法，内部实现是从起始点开始遍历，遍历到索引的节点然后返回元素，时间复杂度为 O(n)，比ArrayList要慢。
        </p>
        <p>
         （2）与ArrayList相比，在LinkedList中插入、添加和删除一个元素会更快，因为在一个元素被插入到中间的时候，不会涉及改变数组的大小，或更新索引。
        </p>
        <p>
         （3）LinkedList比ArrayList消耗更多的内存，因为LinkedList中的每个节点存储了前后节点的引用。
        </p>
        <p>
         <strong>
          26.哪些集合类提供对元素的随机访问？
         </strong>
        </p>
        <p>
         ArrayList、HashMap、TreeMap和HashTable类提供对元素的随机访问。
        </p>
        <p>
         <strong>
          27.EnumSet是什么？
         </strong>
        </p>
        <p>
         java.util.EnumSet是使用枚举类型的集合实现。当集合创建时，枚举集合中的所有元素必须来自单个指定的枚举类型，可以是显示的或隐示的。 EnumSet是不同步的，不允许值为null的元素。它也提供了一些有用的方法，比如copyOf(Collection c)、of(E first,E…rest)和complementOf(EnumSet s)。
        </p>
        <p>
         <strong>
          28.哪些集合类是线程安全的？
         </strong>
        </p>
        <p>
         Vector、HashTable、Properties和Stack是同步类，所以它们是线程安全的，可以在多线程环境下使用。Java1.5并发API包括一些集合类，允许迭代时修改，因为它们都工作在集合的克隆上，所以它们在多线程环境中是安全的。
        </p>
        <p>
         <strong>
          29.并发集合类是什么？
         </strong>
        </p>
        <p>
         Java1.5并发包（java.util.concurrent）包含线程安全集合类，允许在迭代时修改集合。迭代器被设计为fail-fast的，会 抛出ConcurrentModificationException。一部分类为：CopyOnWriteArrayList、 ConcurrentHashMap、CopyOnWriteArraySet。
        </p>
        <p>
         <strong>
          30.BlockingQueue是什么？
         </strong>
        </p>
        <p>
         Java.util.concurrent.BlockingQueue是一个队列，在进行检索或移除一个元素的时候，它会等待队列变为非空；当在添加一 个元素时，它会等待队列中的可用空间。BlockingQueue接口是Java集合框架的一部分，主要用于实现生产者-消费者模式。我们不需要担心等待 生产者有可用的空间，或消费者有可用的对象，因为它都在BlockingQueue的实现类中被处理了。Java提供了集中BlockingQueue的 实现，比如ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue,、 SynchronousQueue等。
        </p>
        <p>
         <strong>
          31.队列和栈是什么，列出它们的区别？
         </strong>
        </p>
        <p>
         栈和队列两者都被用来预存储数据。java.util.Queue是一个接口，它的实现类在Java并发包中。队列允许先进先出（FIFO）检索元素，但并非总是这样。Deque接口允许从两端检索元素。
        </p>
        <p>
         栈与队列很相似，但它允许对元素进行后进先出（LIFO）进行检索。
        </p>
        <p>
         Stack是一个扩展自Vector的类，而Queue是一个接口。
        </p>
        <p>
         <strong>
          32.Collections类是什么？
         </strong>
        </p>
        <p>
         Java.util.Collections是一个工具类仅包含静态方法，它们操作或返回集合。它包含操作集合的多态算法，返回一个由指定集合支持的新集合和其它一些内容。这个类包含集合框架算法的方法，比如折半搜索、排序、混编和逆序等。
        </p>
        <p>
         <strong>
          33.Comparable和Comparator接口是什么？
         </strong>
        </p>
        <p>
         如果我们想使用Array或Collection的排序方法时，需要在自定义类里实现Java提供Comparable接口。Comparable接口有 compareTo(T OBJ)方法，它被排序方法所使用。我们应该重写这个方法，如果“this”对象比传递的对象参数更小、相等或更大时，它返回一个负整数、0或正整数。但 是，在大多数实际情况下，我们想根据不同参数进行排序。比如，作为一个CEO，我想对雇员基于薪资进行排序，一个HR想基于年龄对他们进行排序。这就是我 们需要使用Comparator接口的情景，因为Comparable.compareTo(Object o)方法实现只能基于一个字段进行排序，我们不能根据对象排序的需要选择字段。Comparator接口的compare(Object o1, Object o2)方法的实现需要传递两个对象参数，若第一个参数比第二个小，返回负整数；若第一个等于第二个，返回0；若第一个比第二个大，返回正整数。
        </p>
        <p>
         <strong>
          34.Comparable和Comparator接口有何区别？
         </strong>
        </p>
        <p>
         Comparable和Comparator接口被用来对对象集合或者数组进行排序。Comparable接口被用来提供对象的自然排序，我们可以使用它来提供基于单个逻辑的排序。
        </p>
        <p>
         Comparator接口被用来提供不同的排序算法，我们可以选择需要使用的Comparator来对给定的对象集合进行排序。
        </p>
        <p>
         <strong>
          35.我们如何对一组对象进行排序？
         </strong>
        </p>
        <p>
         如果我们需要对一个对象数组进行排序，我们可以使用Arrays.sort()方法。如果我们需要排序一个对象列表，我们可以使用 Collection.sort()方法。两个类都有用于自然排序（使用Comparable）或基于标准的排序（使用Comparator）的重载方法 sort()。Collections内部使用数组排序方法，所有它们两者都有相同的性能，只是Collections需要花时间将列表转换为数组。
        </p>
        <p>
         <strong>
          36.当一个集合被作为参数传递给一个函数时，如何才可以确保函数不能修改它？
         </strong>
        </p>
        <p>
         在作为参数传递之前，我们可以使用Collections.unmodifiableCollection(Collection c)方法创建一个只读集合，这将确保改变集合的任何操作都会抛出UnsupportedOperationException。
        </p>
        <p>
         <strong>
          37.我们如何从给定集合那里创建一个synchronized的集合？
         </strong>
        </p>
        <p>
         我们可以使用Collections.synchronizedCollection(Collection c)根据指定集合来获取一个synchronized（线程安全的）集合。
        </p>
        <p>
         <strong>
          38.集合框架里实现的通用算法有哪些？
         </strong>
        </p>
        <p>
         Java集合框架提供常用的算法实现，比如排序和搜索。Collections类包含这些方法实现。大部分算法是操作List的，但一部分对所有类型的集合都是可用的。部分算法有排序、搜索、混编、最大最小值。
        </p>
        <p>
         <strong>
          39.大写的O是什么？举几个例子？
         </strong>
        </p>
        <p>
         大写的O描述的是，就数据结构中的一系列元素而言，一个算法的性能。Collection类就是实际的数据结构，我们通常基于时间、内存和性能，使用大写 的O来选择集合实现。比如：例子1：ArrayList的get(index i)是一个常量时间操作，它不依赖list中元素的数量。所以它的性能是O(1)。例子2：一个对于数组或列表的线性搜索的性能是O(n)，因为我们需要 遍历所有的元素来查找需要的元素。
        </p>
        <p>
         <strong>
          40.与Java集合框架相关的有哪些最好的实践？
         </strong>
        </p>
        <p>
         （1）根据需要选择正确的集合类型。比如，如果指定了大小，我们会选用Array而非ArrayList。如果我们想根据插入顺序遍历一个Map，我们需要使用TreeMap。如果我们不想重复，我们应该使用Set。
        </p>
        <p>
         （2）一些集合类允许指定初始容量，所以如果我们能够估计到存储元素的数量，我们可以使用它，就避免了重新哈希或大小调整。
        </p>
        <p>
         （3）基于接口编程，而非基于实现编程，它允许我们后来轻易地改变实现。
        </p>
        <p>
         （4）总是使用类型安全的泛型，避免在运行时出现ClassCastException。
        </p>
        <p>
         （5）使用JDK提供的不可变类作为Map的key，可以避免自己实现hashCode()和equals()。
        </p>
        <p>
         （6）尽可能使用Collections工具类，或者获取只读、同步或空的集合，而非编写自己的实现。它将会提供代码重用性，它有着更好的稳定性和可维护性。
        </p>
        <p>
         原文链接：
         <a href="http://www.javacodegeeks.com/2013/02/40-java-collections-interview-questions-and-answers.html" target="_blank" title="40 Java Collections Interview Questions and Answers">
          40 Java Collections Interview Questions and Answers
         </a>
        </p>
        <p>
         作者：Pankaj Kumar   出处：Sanesee
        </p>
       </div>
      </div>
      <div>
       <strong>
        注：转载文章均来自于公开网络，仅供学习使用，不会用于任何商业用途，如果侵犯到原作者的权益，请您与我们联系删除或者授权事宜，联系邮箱：contact@dataunion.org。转载数盟网站文章请注明原文章作者，否则产生的任何版权纠纷与数盟无关。
       </strong>
      </div>
      <!--content_text-->
      <div class="fenxian">
       <!-- JiaThis Button BEGIN -->
       <div class="jiathis_style_32x32">
        <p class="jiathis_button_weixin">
        </p>
        <p class="jiathis_button_tsina">
        </p>
        <p class="jiathis_button_qzone">
        </p>
        <p class="jiathis_button_cqq">
        </p>
        <p class="jiathis_button_tumblr">
        </p>
        <a class="jiathis jiathis_txt jtico jtico_jiathis" href="http://www.jiathis.com/share" target="_blank">
        </a>
        <p class="jiathis_counter_style">
        </p>
       </div>
       <!-- JiaThis Button END -->
      </div>
     </article>
     <!--content-->
     <!--相关文章-->
     <div class="xianguan">
      <div class="xianguantitle">
       相关文章！
      </div>
      <ul class="pic">
       <li>
        <a href="http://dataunion.org/24067.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/08/t0159e709cfdb268a1d_副本.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/24067.html" rel="bookmark" title="数据科学团队的自测题">
         数据科学团队的自测题
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/23675.html">
         <img src="http://dataunion.org/wp-content/uploads/2016/04/318767-15102312331153-300x200.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/23675.html" rel="bookmark" title="一名合格的机器学习工程师需要具备的5项基本技能，你都get了吗?">
         一名合格的机器学习工程师需要具备的5项基本技能，你都get了吗?
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/23561.html">
         <img src="http://dataunion.org/wp-content/uploads/2016/04/wKiom1cOB1yB0cYLAADqVgLdF6E072.jpg-s_2937189739-291x200.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/23561.html" rel="bookmark" title="小船说翻就翻：人们讨厌IT的七个理由">
         小船说翻就翻：人们讨厌IT的七个理由
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/23551.html">
         <img src="http://dataunion.org/wp-content/uploads/2016/04/res11_attpic_brief-269x200.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/23551.html" rel="bookmark" title="程序员友谊的小船咋说翻就翻呢？心好累！">
         程序员友谊的小船咋说翻就翻呢？心好累！
        </a>
       </li>
      </ul>
     </div>
     <!--相关文章-->
     <div class="comment" id="comments">
      <!-- You can start editing here. -->
      <!-- If comments are open, but there are no comments. -->
      <div class="title">
       期待你一针见血的评论，Come on！
      </div>
      <div id="respond">
       <p>
        不用想啦，马上
        <a href="http://dataunion.org/wp-login.php?redirect_to=http%3A%2F%2Fdataunion.org%2F21869.html">
         "登录"
        </a>
        发表自已的想法.
       </p>
      </div>
     </div>
     <!-- .nav-single -->
    </div>
    <!--Container End-->
    <aside id="sitebar">
     <div class="sitebar_list2">
      <div class="wptag">
       <span class="tagtitle">
        热门标签+
       </span>
       <div class="tagg">
        <ul class="menu" id="menu-%e5%8f%8b%e6%83%85%e9%93%be%e6%8e%a5">
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1605" id="menu-item-1605">
          <a href="http://taidizh.com/">
           泰迪智慧
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-20884" id="menu-item-20884">
          <a href="http://www.transwarp.cn/">
           星环科技
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3538" id="menu-item-3538">
          <a href="http://datall.org/">
           珈和遥感
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-20888" id="menu-item-20888">
          <a href="http://www.chinahadoop.cn/">
           小象学院
          </a>
         </li>
        </ul>
       </div>
      </div>
     </div>
     <div class="sitebar_list">
      <div class="textwidget">
       <div align="center">
        <a href="http://study.163.com/course/courseMain.htm?courseId=991022" target="_blank">
         <img src="http://dataunion.org/wp-content/uploads/2016/03/dv.jpg"/>
        </a>
       </div>
      </div>
     </div>
     <div class="sitebar_list">
      <h4 class="sitebar_title">
       文章分类
      </h4>
      <div class="tagcloud">
       <a class="tag-link-44" href="http://dataunion.org/category/industry/demo" style="font-size: 10.204724409449pt;" title="4个话题">
        Demo展示
       </a>
       <a class="tag-link-31" href="http://dataunion.org/category/experts" style="font-size: 15.826771653543pt;" title="52个话题">
        专家团队
       </a>
       <a class="tag-link-870" href="http://dataunion.org/category/tech/ai" style="font-size: 19.795275590551pt;" title="273个话题">
        人工智能
       </a>
       <a class="tag-link-488" href="http://dataunion.org/category/%e5%8a%a0%e5%85%a5%e6%95%b0%e7%9b%9f" style="font-size: 8pt;" title="1个话题">
        加入数盟
       </a>
       <a class="tag-link-869" href="http://dataunion.org/category/tech/viz" style="font-size: 17.204724409449pt;" title="93个话题">
        可视化
       </a>
       <a class="tag-link-30" href="http://dataunion.org/category/partners" style="font-size: 10.645669291339pt;" title="5个话题">
        合作伙伴
       </a>
       <a class="tag-link-889" href="http://dataunion.org/category/parterc" style="font-size: 11.582677165354pt;" title="8个话题">
        合作会议
       </a>
       <a class="tag-link-104" href="http://dataunion.org/category/books" style="font-size: 12.96062992126pt;" title="15个话题">
        图书
       </a>
       <a class="tag-link-220" href="http://dataunion.org/category/tech/base" style="font-size: 19.850393700787pt;" title="281个话题">
        基础架构
       </a>
       <a class="tag-link-219" href="http://dataunion.org/category/tech/analysis" style="font-size: 19.409448818898pt;" title="232个话题">
        数据分析
       </a>
       <a class="tag-link-887" href="http://dataunion.org/category/tech/dm" style="font-size: 13.291338582677pt;" title="17个话题">
        数据挖掘
       </a>
       <a class="tag-link-34" href="http://dataunion.org/category/tech" style="font-size: 20.732283464567pt;" title="404个话题">
        文章
       </a>
       <a class="tag-link-1" href="http://dataunion.org/category/uncategorized" style="font-size: 22pt;" title="693个话题">
        未分类
       </a>
       <a class="tag-link-4" href="http://dataunion.org/category/events" style="font-size: 14.503937007874pt;" title="29个话题">
        活动
       </a>
       <a class="tag-link-890" href="http://dataunion.org/category/tech/%e6%b7%b1%e5%ba%a6%e5%ad%a6%e4%b9%a0" style="font-size: 10.204724409449pt;" title="4个话题">
        深度学习
       </a>
       <a class="tag-link-221" href="http://dataunion.org/category/tech/devl" style="font-size: 18.968503937008pt;" title="193个话题">
        编程语言
       </a>
       <a class="tag-link-888" href="http://dataunion.org/category/career" style="font-size: 15.661417322835pt;" title="48个话题">
        职业规划
       </a>
       <a class="tag-link-5" href="http://dataunion.org/category/jobs" style="font-size: 14.11811023622pt;" title="25个话题">
        职位
       </a>
       <a class="tag-link-871" href="http://dataunion.org/category/industry" style="font-size: 15.716535433071pt;" title="49个话题">
        行业
       </a>
       <a class="tag-link-613" href="http://dataunion.org/category/industry/case" style="font-size: 16.984251968504pt;" title="84个话题">
        行业应用
       </a>
       <a class="tag-link-885" href="http://dataunion.org/category/industry/news" style="font-size: 17.425196850394pt;" title="102个话题">
        行业资讯
       </a>
       <a class="tag-link-10" href="http://dataunion.org/category/training" style="font-size: 14.228346456693pt;" title="26个话题">
        课程
       </a>
       <a class="tag-link-16" href="http://dataunion.org/category/sources" style="font-size: 15.661417322835pt;" title="48个话题">
        资源
       </a>
      </div>
     </div>
     <div class="sitebar_list">
      <h4 class="sitebar_title">
       功能
      </h4>
      <ul>
       <li>
        <a href="http://dataunion.org/wp-login.php?action=register">
         注册
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/wp-login.php">
         登录
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/feed">
         文章
         <abbr title="Really Simple Syndication">
          RSS
         </abbr>
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/comments/feed">
         评论
         <abbr title="Really Simple Syndication">
          RSS
         </abbr>
        </a>
       </li>
       <li>
        <a href="https://cn.wordpress.org/" title="基于WordPress，一个优美、先进的个人信息发布平台。">
         WordPress.org
        </a>
       </li>
      </ul>
     </div>
    </aside>
    <div class="clear">
    </div>
   </div>
   <!--main-->
   ﻿
   <footer id="dibu">
    <div class="about">
     <div class="right">
      <ul class="menu" id="menu-%e5%ba%95%e9%83%a8%e8%8f%9c%e5%8d%95">
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-18024" id="menu-item-18024">
        <a href="http://dataunion.org/category/partners">
         合作伙伴
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20881" id="menu-item-20881">
        <a href="http://dataunion.org/contribute">
         文章投稿
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20872" id="menu-item-20872">
        <a href="http://dataunion.org/category/%e5%8a%a0%e5%85%a5%e6%95%b0%e7%9b%9f">
         加入数盟
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22441" id="menu-item-22441">
        <a href="http://dataunion.org/f-links">
         友情链接
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20874" id="menu-item-20874">
        <a href="http://dataunion.org/aboutus">
         关于数盟
        </a>
       </li>
      </ul>
      <p class="banquan">
       数盟社区        ，
        做最棒的数据科学社区
      </p>
     </div>
     <div class="left">
      <ul class="bottomlist">
       <li>
        <a href="http://weibo.com/DataScientistUnion  " target="_blank" 　title="">
         <img src="http://dataunion.org/wp-content/themes/yzipi/images/weibo.png"/>
        </a>
       </li>
       <li>
        <a class="cd-popup-trigger" href="http://dataunion.org/21869.html#0">
         <img src="http://dataunion.org/wp-content/themes/yzipi/images/weixin.png"/>
        </a>
       </li>
      </ul>
      <div class="cd-popup">
       <div class="cd-popup-container">
        <h1>
         扫描二维码,加微信公众号
        </h1>
        <img src="http://dataunion.org/wp-content/themes/yzipi/images/2014-12-06-1515289049.png"/>
        <a class="cd-popup-close" href="http://dataunion.org/21869.html">
        </a>
       </div>
       <!-- cd-popup-container -->
      </div>
      <!-- cd-popup -->
     </div>
    </div>
    <!--about-->
    <div class="bottom">
     <a href="http://dataunion.org/">
      数盟社区
     </a>
     <a href="http://www.miitbeian.gov.cn/" rel="external nofollow" target="_blank">
      京ICP备14026740号
     </a>
     联系我们：
     <a href="mailto:contact@dataunion.org" target="_blank">
      contact@dataunion.org
     </a>
     <div class="tongji">
     </div>
     <!--bottom-->
     <div class="scroll" id="scroll" style="display:none;">
      ︿
     </div>
    </div>
   </footer>
   <!--dibu-->
  </div>
 </body>
</html>